package 微服务.Docker_2.概述;

/**
 * Docker：一个快速交付应用、运行应用的技术
 */
public class index {
    /**
     * 在微服务里，部署问题是一件棘手的事情，因为微服务特别多，。不可能一个一个部署<p>
     * 而Docker就可以解决部署的难题<p></p>
     * <p>
     * 什么是Docker？<p>
     * 项目部署的问题：<p>
     * 一个大型项目，组件往往很多，运行环境也较为复杂，而且这些微服务还会依赖于各种应用（如前端会依赖node.js、服务端需要数据库、缓存系统（Redis）等）<p>
     * 而所有这些应用将来都会部署到服务器上，而大多数服务器都会采用Linux操作系统<p>
     * 应用在安装到Linux之前，还需要做一些准备工作<p>
     * 因为这些应用还有自己需要的一些依赖、函数库等<p>
     * 而这些应用需要的依赖，有的不同、有的相同、有的相同但是版本不同<p>
     * <a href="">如此复杂的依赖关系，很容易出现兼容性问题</a><p>
     * <a href="">而且这些东西的开发、测试、生产环境也会有差异（如Linux操作系统的类型不同，如ubuntu、Fedora）</a><p></p>
     * <p>
     * Dockers是如何解决问题的？<p>
     * 1、依赖的兼容性问题<p>
     * 将应用的依赖、函数库、配置与应用一起打包（形成<a href="">可移植镜像</a>），将每个应用放到一个隔离容器（使用沙箱机制）去运行，避免互相干扰<p></p>
     * <p>
     * 2、不同环境的操作系统不同问题<p>
     * 我们需要先了解操作系统的结构<p>
     * 以Ubuntu为例：<p>
     * 所有的Linux操作系统都可以分成两层：<p>
     * 1、大家共享的内核（都是一样的）<p>
     * 2、上层的系统应用（不同的Linux操作系统区别是在这里）<p>
     * 内核是负责与硬件交互，提供操作硬件的指令的<p>
     * 这些指令都是比较简陋的，直接使用会很麻烦<p>
     * 而系统应用就会将内核的指令进行组装再封装形成函数，众多函数就成为了函数库。程序员就可以基于这些函数库进行程序开发<p>
     * 为什么不能跨linux操作系统允运行呢？<a href="">因为系统应用不同，提供的函数库也不同</a><p>
     * Docker解决这个问题的方案：<p>
     * Docker将用户程序与所需要调用的系统函数库一起打包，只要内核一样，就能运行<p>
     * Docker运行到不同操作系统时，直接基于打包的库函数，借助操作系统的Linux内核来运行<p>
     * 也就是说，Docker镜像中是包含了完整运行环境的<p>
     *
     * @param args
     */
    public static void main(String[] args) {

    }
}
